package com.example.j280_webproject.day036;

import java.sql.*;

public class JDBC02_Login2 {
    /**
     * 传入用户输入的用户名和密码，验证是否登录成功
     * @param username          用户名
     * @param password          密码
     * @return                  返回false代表登录失败，返回true代表登录成功
     * @throws ClassNotFoundException     如果mysql驱动没有被找到会抛出此异常
     * @throws SQLException               如果mysql 语法出错，则会抛出此异常
     */
    public boolean checkLogin(String username, String password) throws ClassNotFoundException, SQLException {
        String driver = "com.mysql.jdbc.Driver";   // 固定写法
        Class.forName(driver);                     // 通过反射机制 把指定的类加载到当前类中

        // WARNing
        String url = "jdbc:mysql://localhost:3306/mygxa?useSSL=false&characterEncoding=UTF-8";
        String user = "root";
        String pass = "root";
        Connection conn = DriverManager.getConnection(url, user, pass);    // JDBC数据库连接池
        System.out.println("连接成功");

        String sql = "select password from user where username=? limit 1";
        PreparedStatement preparedStatement = conn.prepareStatement(sql);
        // select count(*) from user where username='付志威' or 1=1 or password='' limit 1;  典型的注入攻击
        // select password from user where username='付志威是狗狗狗狗狗狗' or 1=1 or password=' limit 1
        preparedStatement.setString(1,username);
        ResultSet resultSet = preparedStatement.executeQuery();
        if(resultSet.next()) {   // 如果next方法为true，代表存在记录，找到用户名对应的密码
            // 验证密码  如果密码相同，则返回true，否则返回false
            return resultSet.getString("password").equals(password);
        }
        return false;    // 如果没有找到password记录，那么next方法返回的是false，if语句不会执行，则会直接执行此行return false
    }
}
